/* eslint-disable no-unused-vars */
import { BrowserWindow, screen } from 'electron';
import { asset, isDev as isDevelopment } from '../util';
import * as path from 'path';

let aiWindow;
// 展开
const MIN_WIDTH = 360;
const MIN_HEIGHT = 700;
// 收起
const PACKUP_WIDTH = 100;
const PACKUP_HEIGTH = 100;
const defaultConfig = {
  width: MIN_WIDTH,
  height: MIN_HEIGHT,
  minWidth: MIN_WIDTH,
  minHeight: MIN_HEIGHT,
  x: null,
  y: null,
  status: 0, // 0 收起 1 展开 默认收起
};
// 基础渲染配置
const screenConfig = JSON.parse(JSON.stringify(defaultConfig));

// 创建 AI 窗口
export function createAiWindow(type, aiCallback, data = {}, parentWindows) {
  // 销毁窗口
  if (type === 'destroy') {
    destroyAiWindow();
    // 还原配置
    for (const key in screenConfig) {
      screenConfig[key] = defaultConfig[key];
    }
    // console.log('screenConfig ====> ', screenConfig);
    // 执行回调
    aiCallback && aiCallback();
    return;
  }

  // 如果窗口已存在，置顶，展开，聚焦
  if (aiWindow) {
    bringAiWindowToTop();
    // 如果是收起，就展开
    if (screenConfig.status == 0) {
      maximizeAiToPanel();
    }
    return;
  }

  aiWindow = new BrowserWindow({
    width: screenConfig.width,
    height: screenConfig.height,
    minHeight: screenConfig.minHeight,
    minWidth: screenConfig.minWidth,
    resizable: true, // 默认允许调整大小
    frame: false, // 隐藏窗口菜单
    transparent: true, // 设置窗口为透明,在Windows上，仅在无边框窗口下起作用。
    alwaysOnTop: true, // 窗口总是显示在最上层
    skipTaskbar: true, // 不在任务栏中显示
    webPreferences: {
      contextIsolation: true,
      enableRemoteModule: false,
      nodeIntegration: false,
      preload: path.resolve(asset('preai.js')),
    },
    // 开启：可以在授课模式下打开AI助手，但是会导致Ai助手和客户端不分离
    //     也就是客户端最小化时Ai助手也会最小化。但是客户端打开时效果和之前一样，不会受影响
    // parent: parentWindows,
  });

  // 设置默认展开窗口位置
  const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize;
  screenConfig.x = screenWidth - screenConfig.width - 100; // 距离屏幕右边100px   宽度-自身宽度-100
  screenConfig.y = (screenHeight - screenConfig.height) / 2; // 垂直居中

  // aiWindow.setPosition(x, y);
  // setMinimumSize(screenConfig.width, screenConfig.height);

  // 默认收起桌面
  // minimizeAiToBall();
  // 默认展开卓弥岸
  aiWindow.setAlwaysOnTop(true, 'screen-saver');
  maximizeAiToPanel();
  // 转换参数
  const queryStr = new URLSearchParams(data).toString();
  // 加载页面
  if (isDevelopment || __dev) {
    // 98开发地址
    aiWindow.loadURL('http://192.168.1.98/szjc-ai-mobile/#/ai?' + queryStr);
  } else {
    // aiWindow.loadURL('线上地址' + queryStr);
  }

  // 设置窗口图标和名称
  aiWindow.setIcon(asset('icon.ico'));
  aiWindow.setTitle('AI 助手');

  // 窗口关闭时清空引用
  aiWindow.on('closed', () => {
    aiWindow = null;
  });

  // 监听窗口的 resize 事件
  aiWindow.on('resize', () => {
    const bounds = aiWindow.getBounds(); // 获取窗口的新尺寸
    const { width, height } = bounds;
    // console.log(`窗口正在被拖拽放大或缩小，新宽度: ${width}, 新高度: ${height}`);
    // 缓存新的高度(收起状态下不存储)
    if (screenConfig.status == 1) {
      // console.log('screenConfig.status ===> ', screenConfig.status);
      screenConfig.height = height;
      screenConfig.width = width;
    }
  });

  // 监听窗口的 move 事件
  aiWindow.on('move', () => {
    const [x, y] = aiWindow.getPosition(); // 获取窗口的新位置
    // 缓存新的坐标(收起状态下不存储)
    // console.log('screenConfig.status ===> ', screenConfig.status);
    if (screenConfig.status == 1) {
      // console.log(`窗口正在被拖拽移动，新位置: x=${x}, y=${y}`);
      screenConfig.x = x;
      screenConfig.y = y;
    }
  });

  return aiWindow;
}

// 提供一个函数来动态设置最小宽度和高度
function setMinimumSize(minWidth, minHeight) {
  if (aiWindow) {
    aiWindow.setMinimumSize(minWidth, minHeight);
  }
}

// 收起桌面变成一个球
export function minimizeAiToBall() {
  if (aiWindow) {
    // 设置收起状态
    screenConfig.status = 0;
    // 禁止调整大小
    aiWindow.setResizable(false);
    const size = 100; // 圆球直径
    setMinimumSize(size, size);
    const { x, y } = getXY(24, 24);
    aiWindow.setBounds({ x, y, width: size, height: size }); // 设置窗口大小
    aiWindow.setAlwaysOnTop(true);
  }
}

// 展开桌面
export function maximizeAiToPanel() {
  if (aiWindow) {
    // 设置展开状态
    screenConfig.status = 1;
    // 允许调整大小
    aiWindow.setResizable(true);
    setMinimumSize(MIN_WIDTH, MIN_HEIGHT);
    const { x, y } = screenConfig;
    aiWindow.setBounds({ x, y, width: screenConfig.width, height: screenConfig.height }); // 设置窗口大小
    aiWindow.setAlwaysOnTop(true);
  }
}

// 获取X轴与Y轴
// 判断区分,如果是 收起状态,- 24,如果是展开状态 -高度
function getXY(offsetX, offsetY) {
  const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize;
  const subtractWidth = screenConfig.status == 1 ? screenConfig.width : PACKUP_WIDTH;
  const subtractHeigth = screenConfig.status == 1 ? screenConfig.height : PACKUP_HEIGTH;
  const x = screenWidth - subtractWidth - offsetX; // 距离屏幕右边多少
  const y = screenHeight - subtractHeigth - offsetY; // 距离底部多少
  return { x, y };
}

// 销毁窗口
export function destroyAiWindow() {
  if (aiWindow) {
    aiWindow.destroy();
    aiWindow = null;
  }
}

// 置顶窗口
export function bringAiWindowToTop() {
  if (aiWindow) {
    aiWindow.setAlwaysOnTop(true);
    aiWindow.focus();
  }
}
